package tree;

public class ArrBinaryTreeDemo {
    public static void main(String[] args) {
        //顺序存储二叉树
        int[] arr = {1, 2, 3, 4, 5, 6, 7};
        ArrBinaryTree arrBinaryTree = new ArrBinaryTree(arr);
        arrBinaryTree.perOrder(); //1245367
        System.out.println("中序遍历");
        arrBinaryTree.infixOrder(0); //4251637
        System.out.println("后序遍历");
        arrBinaryTree.postOrder(0); //4256731
    }
}

class ArrBinaryTree {
    private int[] arr; //存储数据节点的数组

    public ArrBinaryTree(int[] arr) {
        this.arr = arr;
    }

    public void perOrder() {
        this.perOrder(0);
    }

    //完全顺序存储二叉树的前序遍历 index为数组的下标
    public void perOrder(int index) {
        if (arr.length == 0 || arr == null) {
            System.out.println("数组为空，不能按照二叉树的前序遍历");
        }
        //输出当前元素
        System.out.println(arr[index]);
        //向左递归遍历
        if (index * 2 + 1 < arr.length) {
            perOrder(index * 2 + 1);
        }
        //向右递归
        if (index * 2 + 2 < arr.length) {
            perOrder(index * 2 + 2);
        }
    }

    //完全顺序存储二叉树的中序遍历
    public void infixOrder(int index) {
        if (arr.length == 0 || arr == null) {
            System.out.println("数组为空，不能按照二叉树的前序遍历");
        }

        //向左递归遍历
        if (index * 2 + 1 < arr.length) {
            infixOrder(index * 2 + 1);
        }
        //输出当前元素
        System.out.println(arr[index]);
        //向右递归
        if (index * 2 + 2 < arr.length) {
            infixOrder(index * 2 + 2);
        }
    }

    //完全顺序存储二叉树的后序遍历
    public void postOrder(int index) {
        if (arr.length == 0 || arr == null) {
            System.out.println("数组为空，不能按照二叉树的前序遍历");
        }
        //向左递归遍历
        if (index * 2 + 1 < arr.length) {
            postOrder(index * 2 + 1);
        }

        //向右递归
        if (index * 2 + 2 < arr.length) {
            postOrder(index * 2 + 2);
        }
        //输出当前元素
        System.out.println(arr[index]);
    }
}